package com.shujia

class Demo00HelloScala {
  /**
   * def 关键字 声明一个函数
   * main 方法名（程序的主方法）
   *
   * args: 函数的参数名称
   * Array[String]：函数参数的类型
   *
   * Unit：函数的返回值类型 相当于Java中void
   *
   * {方法体}
   */

  /**
   * Scala代码中没有static关键字
   * 如果方法出现在class的定义中，那么它就是一个普通的成员方法
   * 需要创建（new）类的对象进行调用，无法通过类对象进行调用
   *
   * @param args
   */
  //  def main(args: Array[String]): Unit = {
  //    println("Hello World Scala")
  //  }

  def printHello(name: String): Unit = {
    println("Hello " + name)
  }

}

/**
 * Scala中可以通过object定义类对象
 */
object Demo00HelloScala {
  /**
   * 在object中定义的变量、方法都是静态的
   */

  /**
   * 如果main方法定义中object中，那么就可以作为程序的入口
   * 被类对象调用
   *
   * @param args
   */
  def main(args: Array[String]): Unit = {
    println("Hello World Scala")

    /**
     * 类的普通方法，即在class中定义的方法，需要创建类的对象进行调用
     */
    val helloScala = new Demo00HelloScala()
    helloScala.printHello("xiaohua")
    /**
     * 在Scala中也可以使用Java中定义好的类
     * 反过来也可以
     */
    val helloJava = new HelloJava()
    helloJava.printHello("xiaohong")

    /**
     * object中的方法可以直接通过类对象（名）进行调用
     */
    Demo00HelloScala.staticPrintHello()
    // 也可以直接使用”静态“方法名直接调用
    staticPrintHello()

    // 方法中自己调用自己会出现递归
    //    Demo00HelloScala.main(args)

  }

  def staticPrintHello(): Unit = {
    println("static Hello")
  }
}
